#ifndef WAVELETPP_DETAIL_FILTER_H
#define WAVELETPP_DETAIL_FILTER_H

#include <stdexcept>
#include <memory>
#include <map>

namespace waveletpp { namespace detail
{

[[nodiscard]] inline std::string wcstombs(std::wstring_view str)
{
	if( str.empty() )
		return "";

	auto size = str.size();
	std::string buf(size, '\0');

#ifdef _MSC_VER
	::wcstombs_s(&size, buf.data(), size, str.data(), size);
#else
	std::wcstombs(buf.data(), str.data(), size);
#endif
	return buf;
}

[[nodiscard]] inline std::wstring mbstowcs(std::string_view str)
{
	if( str.empty() )
		return L"";

	auto size = str.size();
	std::wstring buf(size, L'\0');

#ifdef _MSC_VER
	::mbstowcs_s(&size, buf.data(), size, str.data(), size);
#else
	std::mbstowcs(buf.data(), str.data(), size);
#endif
	return buf;
}

template <typename, filter>
struct filter_name {};

#define X_MACRO(e,n) \
	template <typename CharT> \
	struct filter_name<CharT, filter::e> { \
		static constexpr const CharT *get() { \
			if constexpr( std::is_same_v<CharT,char> ) \
				return n; \
			else \
				return L##n; \
		} \
	};
	WAVELETPP_FILTER_LIST
#undef X_MACRO

} //namespace detail

template <typename CharT, filter Filter>
constexpr const CharT *filter_name()
{
	return detail::filter_name<CharT,Filter>::get();
}

template <filter Filter>
constexpr const char *filter_name()
{
	return filter_name<char,Filter>();
}

template <filter Filter>
constexpr const wchar_t *wfilter_name()
{
	return filter_name<wchar_t,Filter>();
}

template <typename CharT>
const CharT *filter_name(filter_t filter)
{
	switch( filter )
	{
#define X_MACRO(e,n) case filter::e: \
		if constexpr( std::is_same_v<CharT,char> ) \
			return n; \
		else \
			return L##n;
		WAVELETPP_FILTER_LIST
		default: break;
#undef X_MACRO
	}
	throw std::invalid_argument (
		"rtbbt::wda::wavelet::from_filter_name: Invalid filter"
	);
}

inline const char *filter_name(filter_t filter)
{
	return filter_name<char>(filter);
}

inline const wchar_t *wfilter_name(filter_t filter)
{
	return filter_name<wchar_t>(filter);
}

inline filter_t from_filter_name(std::string_view name)
{
#define X_MACRO(e,n) if( name == n ) return filter::e;
	WAVELETPP_FILTER_LIST
#undef X_MACRO
	throw std::invalid_argument (
		"waveletpp::from_filter_name: Invalid filter name"
	);
}

inline filter_t from_filter_name(std::wstring_view name)
{
#define X_MACRO(e,n) if( name == L##n ) return filter::e;
	WAVELETPP_FILTER_LIST
#undef X_MACRO
	throw std::invalid_argument (
		"waveletpp::from_filter_name: Invalid filter name"
	);
}

inline filter_t filter_arg_enum(const filter_arg &arg)
{
    if( arg.index() == 0 )
        return std::get<0>(arg);
    else if( arg.index() == 1 )
        return from_filter_name(std::get<1>(arg));
    else if( arg.index() == 2 )
        return from_filter_name(std::get<2>(arg));
    throw std::invalid_argument (
        "waveletpp::filter_arg_enum: Invalid filter argument"
    );
    // return {};
}

inline std::string_view filter_arg_name(const filter_arg &arg)
{
    if( arg.index() == 0 )
        return filter_name(std::get<0>(arg));
    else if( arg.index() == 1 )
        return std::get<1>(arg);
    else if( arg.index() == 2 )
        return detail::wcstombs(std::get<2>(arg));
    throw std::invalid_argument (
        "waveletpp::filter_arg_enum: Invalid filter argument"
    );
	// return {};
}

inline std::wstring_view filter_arg_wname(const filter_arg &arg)
{
    if( arg.index() == 0 )
        return wfilter_name(std::get<0>(arg));
    else if( arg.index() == 1 )
        return detail::mbstowcs(std::get<1>(arg));
    else if( arg.index() == 2 )
        return std::get<2>(arg);
    throw std::invalid_argument (
        "waveletpp::filter_arg_enum: Invalid filter argument"
    );
    // return {};
}

template <typename CharT>
std::basic_string_view<CharT> filter_arg_name(const filter_arg &arg)
{
	if constexpr( std::is_same_v<CharT,char> )
		return filter_arg_name(arg);
	else
		return filter_arg_wname(arg);
}

inline bool check_filter(filter_arg filter, bool _throw)
{
    if( _throw )
    {
        auto ret = filter_arg_enum(filter); (void)ret;
        return true;
    }
    try {
        auto ret = filter_arg_enum(filter); (void)ret;
        return true;
    }
    catch(...) {}
    return false;
}

inline std::vector<double> lo_d(const filter_arg &filter)
{
	static const std::map<filter_t, const std::vector<double>> map{
		{filter::db1, {0.7071, 0.7071}},
		{filter::db2, {0.48296291314469025, 0.83651630373746899, 0.22414386804185735, -0.12940952255092145}},
		{
			filter::db3,
			{
				0.33267055295095688,
				0.80689150931333875,
				0.45987750211933132,
				-0.13501102001039084,
				-0.085441273882241486,
				0.035226291882100656
			}
		},
		{
			filter::db4,
			{
				0.23037781330885523,
				0.71484657055254153,
				0.63088076792959036,
				-0.027983769416983849,
				-0.18703481171888114,
				0.030841381835986965,
				0.032883011666982945,
				-0.010597401784997278
			}
		},
		{
			filter::db5,
			{
				0.16010239797412501,
				0.60382926979747287,
				0.72430852843857441,
				0.13842814590110342,
				-0.24229488706619015,
				-0.03224486958502952,
				0.077571493840065148,
				-0.0062414902130117052,
				-0.012580751999015526,
				0.0033357252850015492
			}
		},
		{
			filter::db6,
			{
				0.11154074335008017,
				0.49462389039838539,
				0.75113390802157753,
				0.3152503517092432,
				-0.22626469396516913,
				-0.12976686756709563,
				0.097501605587079362,
				0.027522865530016288,
				-0.031582039318031156,
				0.0005538422009938016,
				0.0047772575110106514,
				-0.0010773010849955799
			}
		},
		{
			filter::db7,
			{
				0.077852054085062364,
				0.39653931948230575,
				0.72913209084655506,
				0.4697822874053586,
				-0.14390600392910627,
				-0.22403618499416572,
				0.071309219267050042,
				0.080612609151065898,
				-0.038029936935034633,
				-0.01657454163101562,
				0.012550998556013784,
				0.00042957797300470274,
				-0.0018016407039998328,
				0.00035371380000103988
			}
		},
		{
			filter::db8,
			{
				0.054415842243081609,
				0.31287159091446592,
				0.67563073629801285,
				0.58535468365486909,
				-0.015829105256023893,
				-0.28401554296242809,
				0.00047248457399797254,
				0.12874742662018601,
				-0.017369301002022108,
				-0.044088253931064719,
				0.013981027917015516,
				0.0087460940470156547,
				-0.0048703529930106603,
				-0.00039174037299597711,
				0.00067544940599855677,
				-0.00011747678400228192
			}
		},
		{
			filter::db9,
			{
				0.038077947363167282,
				0.24383467463766728,
				0.6048231236767786,
				0.65728807803663891,
				0.13319738582208895,
				-0.29327378327258685,
				-0.096840783220879037,
				0.14854074933476008,
				0.030725681478322865,
				-0.067632829059523988,
				0.00025094711499193845,
				0.022361662123515244,
				-0.004723204757894831,
				-0.0042815036819047227,
				0.0018476468829611268,
				0.00023038576399541288,
				-0.00025196318899817888,
				3.9347319995026124e-05
			}
		},
		{
			filter::db10,
			{
				0.026670057900950818,
				0.18817680007762133,
				0.52720118893091983,
				0.68845903945259213,
				0.28117234366042648,
				-0.24984642432648865,
				-0.19594627437659665,
				0.12736934033574265,
				0.093057364603806592,
				-0.071394147165860775,
				-0.029457536821945671,
				0.033212674058933238,
				0.0036065535669883944,
				-0.010733175482979604,
				0.0013953517469940798,
				0.0019924052949908499,
				-0.00068585669500468248,
				-0.0001164668549943862,
				9.3588670001089845e-05,
				-1.3264203002354869e-05
			}
		},
		{
			filter::db11,
			{
				0.018694297761470441,
				0.14406702115061959,
				0.44989976435603013,
				0.68568677491617847,
				0.41196436894789695,
				-0.16227524502747828,
				-0.27423084681792875,
				0.066043588196690886,
				0.14981201246638268,
				-0.04647995511667613,
				-0.066438785695020222,
				0.031335090219045313,
				0.020840904360180039,
				-0.015364820906201324,
				-0.0033408588730145018,
				0.0049284176560587777,
				-0.00030859285881515924,
				-0.00089302325066623663,
				0.00024915252355281426,
				5.4439074699366381e-05,
				-3.4634984186983789e-05,
				4.4942742772363519e-06
			}
		},
		{
			filter::db12,
			{
				0.013112257957229239,
				0.10956627282118277,
				0.37735513521420411,
				0.65719872257929113,
				0.51588647842780067,
				-0.044763885653777619,
				-0.31617845375277914,
				-0.023779257256064865,
				0.18247860592758275,
				0.0053595696743599965,
				-0.09643212009649671,
				0.010849130255828966,
				0.041546277495087637,
				-0.01221864906974642,
				-0.012840825198299882,
				0.0067114990087955486,
				0.0022486072409952287,
				-0.0021795036186277044,
				6.5451282125215034e-06,
				0.00038865306282092672,
				-8.8504109208203182e-05,
				-2.4241545757030318e-05,
				1.2776952219379579e-05,
				-1.5290717580684923e-06
			}
		},
		{
			filter::db13,
			{
				0.0092021335389622788,
				0.082861243872901946,
				0.31199632216043488,
				0.61105585115878114,
				0.58888957043121193,
				0.086985726179645007,
				-0.31497290771138414,
				-0.12457673075080665,
				0.17947607942935084,
				0.072948933656788742,
				-0.10580761818792761,
				-0.026488406475345658,
				0.056139477100276156,
				0.0023799722540522269,
				-0.023831420710327809,
				0.0039239414487955773,
				0.0072555894016171187,
				-0.002761911234656831,
				-0.0013156739118922766,
				0.00093232613086724904,
				4.9251525126285676e-05,
				-0.00016512898855650571,
				3.0678537579324358e-05,
				1.0441930571407941e-05,
				-4.7004164793608082e-06,
				5.2200350984547998e-07
			}
		},
		{
			filter::db14,
			{
				0.0064611534600864905,
				0.062364758849384874,
				0.25485026779256437,
				0.55430561794077093,
				0.63118784910471981,
				0.21867068775886594,
				-0.27168855227867705,
				-0.21803352999321651,
				0.13839521386479153,
				0.13998901658445695,
				-0.086748411568110598,
				-0.071548955503983505,
				0.05523712625925082,
				0.026981408307947971,
				-0.030185351540353976,
				-0.0056150495303375755,
				0.012789493266340071,
				-0.00074621898926387534,
				-0.003849638868019787,
				0.001061691085606874,
				0.00070802115423540481,
				-0.00038683194731287514,
				-4.1777245770370672e-05,
				6.875504252695734e-05,
				-1.0337209184568496e-05,
				-4.3897049017804176e-06,
				1.7249946753674012e-06,
				-1.7871399683109222e-07
			}
		},
		{
			filter::db15,
			{
				0.0045385373615773762,
				0.046743394892750617,
				0.20602386398692688,
				0.49263177170797529,
				0.64581314035721027,
				0.33900253545462167,
				-0.19320413960907623,
				-0.28888259656686216,
				0.065282952848765688,
				0.19014671400708816,
				-0.039666176555733602,
				-0.11112093603713753,
				0.033877143923563204,
				0.054780550584559995,
				-0.025767007328366939,
				-0.020810050169636805,
				0.015083918027862582,
				0.0051010003604228726,
				-0.0064877345603061454,
				-0.00024175649075894543,
				0.0019433239803823459,
				-0.00037348235413726472,
				-0.00035956524436229364,
				0.00015589648992055726,
				2.579269915531323e-05,
				-2.8133296266037558e-05,
				3.3629871817363823e-06,
				1.8112704079399406e-06,
				-6.3168823258794506e-07,
				6.1333599133037138e-08
			}
		},
		{filter::bior11, {0.70710678118654757, 0.70710678118654757}},
		{filter::bior13, {0.0, 0.0, 0.70710678118654757, 0.70710678118654757, 0.0, 0.0}},
		{filter::bior15, {0.0, 0.0, 0.0, 0.0, 0.70710678118654757, 0.70710678118654757, 0.0, 0.0, 0.0, 0.0}},
		{filter::bior22, {0.0, 0.35355339059327379, 0.70710678118654757, 0.35355339059327379, 0.0, 0.0}},
		{
			filter::bior24,
			{0.0, 0.0, 0.0, 0.35355339059327379, 0.70710678118654757, 0.35355339059327379, 0.0, 0.0, 0.0, 0.0}
		},
		{
			filter::bior26,
			{
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.35355339059327379,
				0.70710678118654757,
				0.35355339059327379,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0
			}
		},
		{
			filter::bior28,
			{
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.35355339059327379,
				0.70710678118654757,
				0.35355339059327379,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0
			}
		},
		{filter::bior31, {0.17677669529663689, 0.53033008588991071, 0.53033008588991071, 0.17677669529663689}},
		{
			filter::bior33,
			{0.0, 0.0, 0.17677669529663689, 0.53033008588991071, 0.53033008588991071, 0.17677669529663689, 0.0, 0.0}
		},
		{
			filter::bior35,
			{
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.17677669529663689,
				0.53033008588991071,
				0.53033008588991071,
				0.17677669529663689,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0
			}
		},
		{
			filter::bior37,
			{
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.17677669529663689,
				0.53033008588991071,
				0.53033008588991071,
				0.17677669529663689,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0
			}
		},
		{
			filter::bior39,
			{
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.17677669529663689,
				0.53033008588991071,
				0.53033008588991071,
				0.17677669529663689,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0
			}
		},
		{
			filter::bior44,
			{
				0.0,
				-0.064538882628697058,
				-0.040689417609164058,
				0.41809227322161724,
				0.7884856164055829,
				0.41809227322161724,
				-0.040689417609164058,
				-0.064538882628697058,
				0.0,
				0.0
			}
		},
		{
			filter::bior55,
			{
				0.013456709459118716,
				-0.0026949668801115071,
				-0.13670658466432914,
				-0.093504697400938863,
				0.47680326579848425,
				0.89950610974864842,
				0.47680326579848425,
				-0.093504697400938863,
				-0.13670658466432914,
				-0.0026949668801115071,
				0.013456709459118716,
				0.0
			}
		},
		{
			filter::bior68,
			{
				0.0,
				0.0,
				0.0,
				0.014426282505624435,
				0.014467504896790148,
				-0.078722001062628819,
				-0.040367979030339923,
				0.41784910915027457,
				0.75890772945365415,
				0.41784910915027457,
				-0.040367979030339923,
				-0.078722001062628819,
				0.014467504896790148,
				0.014426282505624435,
				0.0,
				0.0,
				0.0,
				0.0
			}
		},
		{
			filter::coif1,
			{
				-0.072732619512853897,
				0.33789766245780922,
				0.85257202021225542,
				0.38486484686420286,
				-0.072732619512853897,
				-0.01565572813546454
			}
		},
		{
			filter::coif2,
			{
				0.016387336463522112,
				-0.041464936781759151,
				-0.067372554721963018,
				0.38611006682116222,
				0.81272363544554227,
				0.41700518442169254,
				-0.076488599078306393,
				-0.059434418646456898,
				0.023680171946334084,
				0.0056114348193944995,
				-0.0018232088707029932,
				-0.00072054944536451221
			}
		},
		{
			filter::coif3,
			{
				-0.0037935128644910141,
				0.0077825964273254182,
				0.023452696141836267,
				-0.0657719112818555,
				-0.061123390002672869,
				0.4051769024096169,
				0.79377722262562056,
				0.42848347637761874,
				-0.071799821619312018,
				-0.082301927106885983,
				0.034555027573061628,
				0.015880544863615904,
				-0.0090079761366615805,
				-0.0025745176887502236,
				0.0011175187708906016,
				0.00046621696011288631,
				-7.0983303138141252e-05,
				-3.4599772836212559e-05
			}
		},
		{
			filter::coif4,
			{
				0.00089231366858231456,
				-0.0016294920126017326,
				-0.0073461663276420935,
				0.016068943964776348,
				0.026682300156053072,
				-0.081266699680878754,
				-0.056077313316754807,
				0.41530840703043026,
				0.78223893092049901,
				0.4343860564914685,
				-0.066627474263425038,
				-0.096220442033987982,
				0.039334427123337491,
				0.025082261844864097,
				-0.015211731527946259,
				-0.0056582866866107199,
				0.0037514361572784571,
				0.0012665619292989445,
				-0.00058902075624433831,
				-0.00025997455248771324,
				6.2339034461007128e-05,
				3.1229875865345646e-05,
				-3.2596802368833675e-06,
				-1.7849850030882614e-06
			}
		},
		{
			filter::coif5,
			{
				-0.00021208083980379827,
				0.00035858968789573785,
				0.0021782363581090178,
				-0.004159358781386048,
				-0.010131117519849788,
				0.023408156785839195,
				0.02816802897093635,
				-0.091920010559696244,
				-0.052043163176243773,
				0.42156620669085149,
				0.77428960365295618,
				0.43799162617183712,
				-0.062035963962903569,
				-0.10557420870333893,
				0.041289208750181702,
				0.032683574267111833,
				-0.019761778942572639,
				-0.0091642311624818458,
				0.0067641854480530832,
				0.0024333732126576722,
				-0.0016628637020130838,
				-0.00063813134304511142,
				0.00030225958181306315,
				0.00014054114970203437,
				-4.1340432272512511e-05,
				-2.1315026809955787e-05,
				3.7346551751414047e-06,
				2.0637618513646814e-06,
				-1.6744288576823017e-07,
				-9.517657273819165e-08
			}
		},
		{filter::sym2, {0.48296291314469025, 0.83651630373746899, 0.22414386804185735, -0.12940952255092145}},
		{
			filter::sym3,
			{
				0.33267055295095688,
				0.80689150931333875,
				0.45987750211933132,
				-0.13501102001039084,
				-0.085441273882241486,
				0.035226291882100656
			}
		},
		{
			filter::sym4,
			{
				0.032223100604042702,
				-0.012603967262037833,
				-0.099219543576847216,
				0.29785779560527736,
				0.80373875180591614,
				0.49761866763201545,
				-0.02963552764599851,
				-0.075765714789273325
			}
		},
		{
			filter::sym5,
			{
				0.019538882735286728,
				-0.021101834024758855,
				-0.17532808990845047,
				0.016602105764522319,
				0.63397896345821192,
				0.72340769040242059,
				0.1993975339773936,
				-0.039134249302383094,
				0.029519490925774643,
				0.027333068345077982
			}
		},
		{
			filter::sym6,
			{
				-0.007800708325034148,
				0.0017677118642428036,
				0.044724901770665779,
				-0.021060292512300564,
				-0.072637522786462516,
				0.3379294217276218,
				0.787641141030194,
				0.49105594192674662,
				-0.048311742585632998,
				-0.11799011114819057,
				0.0034907120842174702,
				0.015404109327027373
			}
		},
		{
			filter::sym7,
			{
				0.010268176708511255,
				0.0040102448715336634,
				-0.10780823770381774,
				-0.14004724044296152,
				0.28862963175151463,
				0.76776431700316405,
				0.5361019170917628,
				0.017441255086855827,
				-0.049552834937127255,
				0.067892693501372697,
				0.03051551316596357,
				-0.01263630340325193,
				-0.0010473848886829163,
				0.0026818145682578781
			}
		},
		{
			filter::sym8,
			{
				0.0018899503327594609,
				-0.0003029205147213668,
				-0.014952258337048231,
				0.0038087520138906151,
				0.049137179673607506,
				-0.027219029917056003,
				-0.051945838107709037,
				0.3644418948353314,
				0.77718575170052351,
				0.48135965125837221,
				-0.061273359067658524,
				-0.14329423835080971,
				0.0076074873249176054,
				0.031695087811492981,
				-0.00054213233179114812,
				-0.0033824159510061256
			}
		},
		{
			filter::sym9,
			{
				0.0010694900329086053,
				-0.00047315449868008311,
				-0.010264064027633142,
				0.0088592674934004842,
				0.06207778930288603,
				-0.018233770779395985,
				-0.19155083129728512,
				0.035272488035271894,
				0.61733844914093583,
				0.717897082764412,
				0.238760914607303,
				-0.054568958430834071,
				0.00058346274612580684,
				0.03022487885827568,
				-0.01152821020767923,
				-0.013271967781817119,
				0.00061978088898558676,
				0.0014009155259146807
			}
		},
		{
			filter::sym10,
			{
				-0.00045932942100465878,
				5.7036083618494284e-05,
				0.0045931735853118284,
				-0.00080435893201654491,
				-0.02035493981231129,
				0.0057649120335819086,
				0.049994972077376687,
				-0.0319900568824278,
				-0.035536740473817552,
				0.38382676106708546,
				0.7695100370211071,
				0.47169066693843925,
				-0.070880535783243853,
				-0.15949427888491757,
				0.011609893903711381,
				0.045927239231092203,
				-0.0014653825813050513,
				-0.0086412992770224222,
				9.5632670722894754e-05,
				0.00077015980911449011
			}
		}
	};
	return map.at(filter_arg_enum(filter));
}

inline std::vector<double> hi_d(const filter_arg &filter)
{
	static const std::map<filter_t, const std::vector<double>> map{
		{filter::db1, {0.7071, -0.7071}},
		{filter::db2, {-0.12940952255092145, -0.22414386804185735, 0.83651630373746899, -0.48296291314469025}},
		{
			filter::db3,
			{
				0.035226291882100656,
				0.085441273882241486,
				-0.13501102001039084,
				-0.45987750211933132,
				0.80689150931333875,
				-0.33267055295095688
			}
		},
		{
			filter::db4,
			{
				-0.010597401784997278,
				-0.032883011666982945,
				0.030841381835986965,
				0.18703481171888114,
				-0.027983769416983849,
				-0.63088076792959036,
				0.71484657055254153,
				-0.23037781330885523
			}
		},
		{
			filter::db5,
			{
				0.0033357252850015492,
				0.012580751999015526,
				-0.0062414902130117052,
				-0.077571493840065148,
				-0.03224486958502952,
				0.24229488706619015,
				0.13842814590110342,
				-0.72430852843857441,
				0.60382926979747287,
				-0.16010239797412501
			}
		},
		{
			filter::db6,
			{
				-0.0010773010849955799,
				-0.0047772575110106514,
				0.0005538422009938016,
				0.031582039318031156,
				0.027522865530016288,
				-0.097501605587079362,
				-0.12976686756709563,
				0.22626469396516913,
				0.3152503517092432,
				-0.75113390802157753,
				0.49462389039838539,
				-0.11154074335008017
			}
		},
		{
			filter::db7,
			{
				0.00035371380000103988,
				0.0018016407039998328,
				0.00042957797300470274,
				-0.01255099855601378,
				-0.01657454163101562,
				0.038029936935034633,
				0.080612609151065898,
				-0.071309219267050042,
				-0.22403618499416572,
				0.14390600392910627,
				0.4697822874053586,
				-0.72913209084655506,
				0.39653931948230575,
				-0.077852054085062364
			}
		},
		{
			filter::db8,
			{
				-0.00011747678400228192,
				-0.00067544940599855677,
				-0.00039174037299597711,
				0.0048703529930106603,
				0.0087460940470156547,
				-0.013981027917015516,
				-0.044088253931064719,
				0.017369301002022108,
				0.12874742662018601,
				-0.00047248457399797254,
				-0.28401554296242809,
				0.015829105256023893,
				0.58535468365486909,
				-0.67563073629801285,
				0.31287159091446592,
				-0.054415842243081609
			}
		},
		{
			filter::db9,
			{
				3.9347319995026124e-05,
				0.00025196318899817888,
				0.00023038576399541288,
				-0.0018476468829611268,
				-0.0042815036819047227,
				0.004723204757894831,
				0.022361662123515244,
				-0.00025094711499193845,
				-0.067632829059523988,
				-0.030725681478322865,
				0.14854074933476008,
				0.096840783220879037,
				-0.29327378327258685,
				-0.13319738582208895,
				0.65728807803663891,
				-0.6048231236767786,
				0.24383467463766728,
				-0.038077947363167282
			}
		},
		{
			filter::db10,
			{
				-1.3264203002354869e-05,
				-9.3588670001089845e-05,
				-0.0001164668549943862,
				0.00068585669500468248,
				0.0019924052949908499,
				-0.0013953517469940798,
				-0.010733175482979604,
				-0.0036065535669883944,
				0.033212674058933238,
				0.029457536821945671,
				-0.071394147165860775,
				-0.093057364603806592,
				0.12736934033574265,
				0.19594627437659665,
				-0.24984642432648865,
				-0.28117234366042648,
				0.68845903945259213,
				-0.52720118893091983,
				0.18817680007762133,
				-0.026670057900950818
			}
		},
		{
			filter::db11,
			{
				4.4942742772363519e-06,
				3.4634984186983789e-05,
				5.4439074699366381e-05,
				-0.00024915252355281426,
				-0.00089302325066623663,
				0.00030859285881515924,
				0.0049284176560587777,
				0.0033408588730145018,
				-0.015364820906201324,
				-0.020840904360180039,
				0.031335090219045313,
				0.066438785695020222,
				-0.04647995511667613,
				-0.14981201246638268,
				0.066043588196690886,
				0.27423084681792875,
				-0.16227524502747828,
				-0.41196436894789695,
				0.68568677491617847,
				-0.44989976435603013,
				0.14406702115061959,
				-0.018694297761470441
			}
		},
		{
			filter::db12,
			{
				-1.5290717580684923e-06,
				-1.2776952219379579e-05,
				-2.4241545757030318e-05,
				8.8504109208203182e-05,
				0.00038865306282092672,
				-6.5451282125215034e-06,
				-0.0021795036186277044,
				-0.0022486072409952287,
				0.0067114990087955486,
				0.012840825198299882,
				-0.01221864906974642,
				-0.041546277495087637,
				0.010849130255828966,
				0.09643212009649671,
				0.0053595696743599965,
				-0.18247860592758275,
				-0.023779257256064865,
				0.31617845375277914,
				-0.044763885653777619,
				-0.51588647842780067,
				0.65719872257929113,
				-0.37735513521420411,
				0.10956627282118277,
				-0.013112257957229239
			}
		},
		{
			filter::db13,
			{
				5.2200350984547998e-07,
				4.7004164793608082e-06,
				1.0441930571407941e-05,
				-3.0678537579324358e-05,
				-0.00016512898855650571,
				-4.9251525126285676e-05,
				0.00093232613086724904,
				0.0013156739118922766,
				-0.002761911234656831,
				-0.0072555894016171187,
				0.0039239414487955773,
				0.023831420710327809,
				0.0023799722540522269,
				-0.056139477100276156,
				-0.026488406475345658,
				0.10580761818792761,
				0.072948933656788742,
				-0.17947607942935084,
				-0.12457673075080665,
				0.31497290771138414,
				0.086985726179645007,
				-0.58888957043121193,
				0.61105585115878114,
				-0.31199632216043488,
				0.082861243872901946,
				-0.0092021335389622788
			}
		},
		{
			filter::db14,
			{
				-1.7871399683109222e-07,
				-1.7249946753674012e-06,
				-4.3897049017804176e-06,
				1.0337209184568496e-05,
				6.875504252695734e-05,
				4.1777245770370672e-05,
				-0.00038683194731287514,
				-0.00070802115423540481,
				0.001061691085606874,
				0.003849638868019787,
				-0.00074621898926387534,
				-0.012789493266340071,
				-0.0056150495303375755,
				0.030185351540353976,
				0.026981408307947971,
				-0.05523712625925082,
				-0.071548955503983505,
				0.086748411568110598,
				0.13998901658445695,
				-0.13839521386479153,
				-0.21803352999321651,
				0.27168855227867705,
				0.21867068775886594,
				-0.63118784910471981,
				0.55430561794077093,
				-0.25485026779256437,
				0.062364758849384874,
				-0.0064611534600864905
			}
		},
		{
			filter::db15,
			{
				6.1333599133037138e-08,
				6.3168823258794506e-07,
				1.8112704079399406e-06,
				-3.3629871817363823e-06,
				-2.8133296266037558e-05,
				-2.579269915531323e-05,
				0.00015589648992055726,
				0.00035956524436229364,
				-0.00037348235413726472,
				-0.0019433239803823459,
				-0.00024175649075894543,
				0.0064877345603061454,
				0.0051010003604228726,
				-0.015083918027862582,
				-0.020810050169636805,
				0.025767007328366939,
				0.054780550584559995,
				-0.033877143923563204,
				-0.11112093603713753,
				0.039666176555733602,
				0.19014671400708816,
				-0.065282952848765688,
				-0.28888259656686216,
				0.19320413960907623,
				0.33900253545462167,
				-0.64581314035721027,
				0.49263177170797529,
				-0.20602386398692688,
				0.046743394892750617,
				-0.0045385373615773762
			}
		},
		{filter::bior11, {0.70710678118654757, -0.70710678118654757}},
		{
			filter::bior13,
			{
				-0.088388347648318447,
				-0.088388347648318447,
				0.70710678118654757,
				-0.70710678118654757,
				0.088388347648318447,
				0.088388347648318447
			}
		},
		{
			filter::bior15,
			{
				0.01657281518405971,
				0.01657281518405971,
				-0.12153397801643787,
				-0.12153397801643787,
				0.70710678118654757,
				-0.70710678118654757,
				0.12153397801643787,
				0.12153397801643787,
				-0.01657281518405971,
				-0.01657281518405971
			}
		},
		{
			filter::bior22,
			{
				0.0,
				0.17677669529663689,
				0.35355339059327379,
				-1.0606601717798214,
				0.35355339059327379,
				0.17677669529663689
			}
		},
		{
			filter::bior24,
			{
				0.0,
				-0.033145630368119419,
				-0.066291260736238838,
				0.17677669529663689,
				0.4198446513295126,
				-0.99436891104358249,
				0.4198446513295126,
				0.17677669529663689,
				-0.066291260736238838,
				-0.033145630368119419
			}
		},
		{
			filter::bior26,
			{
				0.0,
				0.0069053396600248784,
				0.013810679320049757,
				-0.046956309688169176,
				-0.10772329869638811,
				0.16987135563661201,
				0.44746600996961211,
				-0.96674755240348298,
				0.44746600996961211,
				0.16987135563661201,
				-0.10772329869638811,
				-0.046956309688169176,
				0.013810679320049757,
				0.0069053396600248784
			}
		},
		{
			filter::bior28,
			{
				0.0,
				-0.0015105430506304422,
				-0.0030210861012608843,
				0.012947511862546647,
				0.028916109826354178,
				-0.052998481890690945,
				-0.13491307360773608,
				0.16382918343409025,
				0.46257144047591658,
				-0.95164212189717856,
				0.46257144047591658,
				0.16382918343409025,
				-0.13491307360773608,
				-0.052998481890690945,
				0.028916109826354178,
				0.012947511862546647,
				-0.0030210861012608843,
				-0.0015105430506304422
			}
		},
		{filter::bior31, {-0.35355339059327379, -1.0606601717798214, 1.0606601717798214, 0.35355339059327379}},
		{
			filter::bior33,
			{
				0.066291260736238838,
				0.19887378220871652,
				-0.15467960838455727,
				-0.99436891104358249,
				0.99436891104358249,
				0.15467960838455727,
				-0.19887378220871652,
				-0.066291260736238838
			}
		},
		{
			filter::bior35,
			{
				-0.013810679320049757,
				-0.041432037960149271,
				0.052480581416189075,
				0.26792717880896527,
				-0.071815532464258744,
				-0.96674755240348298,
				0.96674755240348298,
				0.071815532464258744,
				-0.26792717880896527,
				-0.052480581416189075,
				0.041432037960149271,
				0.013810679320049757
			}
		},
		{
			filter::bior37,
			{
				0.0030210861012608843,
				0.0090632583037826529,
				-0.016831765421310641,
				-0.074663985074019001,
				0.031332978707362888,
				0.301159125922835,
				-0.026499240945345472,
				-0.95164212189717856,
				0.95164212189717856,
				0.026499240945345472,
				-0.301159125922835,
				-0.031332978707362888,
				0.074663985074019001,
				0.016831765421310641,
				-0.0090632583037826529,
				-0.0030210861012608843
			}
		},
		{
			filter::bior39,
			{
				-0.00067974437278369901,
				-0.0020392331183510968,
				0.0050603192196119811,
				0.020618912641105536,
				-0.014112787930175846,
				-0.09913478249423216,
				0.012300136269419315,
				0.32019196836077857,
				0.0020500227115698858,
				-0.94212570067820678,
				0.94212570067820678,
				-0.0020500227115698858,
				-0.32019196836077857,
				-0.012300136269419315,
				0.09913478249423216,
				0.014112787930175846,
				-0.020618912641105536,
				-0.0050603192196119811,
				0.0020392331183510968,
				0.00067974437278369901
			}
		},
		{
			filter::bior44,
			{
				0.0,
				-0.03782845550726404,
				-0.023849465019556843,
				0.11062440441843718,
				0.37740285561283066,
				-0.85269867900889385,
				0.37740285561283066,
				0.11062440441843718,
				-0.023849465019556843,
				-0.03782845550726404
			}
		},
		{
			filter::bior55,
			{
				0.0,
				0.0,
				0.03968708834740544,
				-0.0079481086372403219,
				-0.054463788468236907,
				-0.34560528195603346,
				0.73666018142821055,
				-0.34560528195603346,
				-0.054463788468236907,
				-0.0079481086372403219,
				0.03968708834740544,
				0.0
			}
		},
		{
			filter::bior68,
			{
				0.0,
				-0.0019088317364812906,
				-0.0019142861290887667,
				0.016990639867602342,
				0.01193456527972926,
				-0.04973290349094079,
				-0.077263173167204144,
				0.09405920349573646,
				0.42079628460982682,
				-0.82592299745840225,
				0.42079628460982682,
				0.09405920349573646,
				-0.077263173167204144,
				-0.04973290349094079,
				0.01193456527972926,
				0.016990639867602342,
				-0.0019142861290887667,
				-0.0019088317364812906
			}
		},
		{
			filter::coif1,
			{
				-0.01565572813546454,
				0.072732619512853897,
				0.38486484686420286,
				-0.85257202021225542,
				0.33789766245780922,
				0.072732619512853897
			}
		},
		{
			filter::coif2,
			{
				-0.00072054944536451221,
				0.0018232088707029932,
				0.0056114348193944995,
				-0.023680171946334084,
				-0.059434418646456898,
				0.076488599078306393,
				0.41700518442169254,
				-0.81272363544554227,
				0.38611006682116222,
				0.067372554721963018,
				-0.041464936781759151,
				-0.016387336463522112
			}
		},
		{
			filter::coif3,
			{
				-3.4599772836212559e-05,
				7.0983303138141252e-05,
				0.00046621696011288631,
				-0.0011175187708906016,
				-0.0025745176887502236,
				0.0090079761366615805,
				0.015880544863615904,
				-0.034555027573061628,
				-0.082301927106885983,
				0.071799821619312018,
				0.42848347637761874,
				-0.79377722262562056,
				0.4051769024096169,
				0.061123390002672869,
				-0.0657719112818555,
				-0.023452696141836267,
				0.0077825964273254182,
				0.0037935128644910141
			}
		},
		{
			filter::coif4,
			{
				-1.7849850030882614e-06,
				3.2596802368833675e-06,
				3.1229875865345646e-05,
				-6.2339034461007128e-05,
				-0.00025997455248771324,
				0.00058902075624433831,
				0.0012665619292989445,
				-0.0037514361572784571,
				-0.0056582866866107199,
				0.015211731527946259,
				0.025082261844864097,
				-0.039334427123337491,
				-0.096220442033987982,
				0.066627474263425038,
				0.4343860564914685,
				-0.78223893092049901,
				0.41530840703043026,
				0.056077313316754807,
				-0.081266699680878754,
				-0.026682300156053072,
				0.016068943964776348,
				0.0073461663276420935,
				-0.0016294920126017326,
				-0.00089231366858231456
			}
		},
		{
			filter::coif5,
			{
				-9.517657273819165e-08,
				1.6744288576823017e-07,
				2.0637618513646814e-06,
				-3.7346551751414047e-06,
				-2.1315026809955787e-05,
				4.1340432272512511e-05,
				0.00014054114970203437,
				-0.00030225958181306315,
				-0.00063813134304511142,
				0.0016628637020130838,
				0.0024333732126576722,
				-0.0067641854480530832,
				-0.0091642311624818458,
				0.019761778942572639,
				0.032683574267111833,
				-0.041289208750181702,
				-0.10557420870333893,
				0.062035963962903569,
				0.43799162617183712,
				-0.77428960365295618,
				0.42156620669085149,
				0.052043163176243773,
				-0.091920010559696244,
				-0.02816802897093635,
				0.023408156785839195,
				0.010131117519849788,
				-0.004159358781386048,
				-0.0021782363581090178,
				0.00035858968789573785,
				0.00021208083980379827
			}
		},
		{filter::sym2, {-0.12940952255092145, -0.22414386804185735, 0.83651630373746899, -0.48296291314469025}},
		{
			filter::sym3,
			{
				0.035226291882100656,
				0.085441273882241486,
				-0.13501102001039084,
				-0.45987750211933132,
				0.80689150931333875,
				-0.33267055295095688
			}
		},
		{
			filter::sym4,
			{
				-0.075765714789273325,
				0.02963552764599851,
				0.49761866763201545,
				-0.80373875180591614,
				0.29785779560527736,
				0.099219543576847216,
				-0.012603967262037833,
				-0.032223100604042702
			}
		},
		{
			filter::sym5,
			{
				0.027333068345077982,
				-0.029519490925774643,
				-0.039134249302383094,
				-0.1993975339773936,
				0.72340769040242059,
				-0.63397896345821192,
				0.016602105764522319,
				0.17532808990845047,
				-0.021101834024758855,
				-0.019538882735286728
			}
		},
		{
			filter::sym6,
			{
				0.015404109327027373,
				-0.0034907120842174702,
				-0.11799011114819057,
				0.048311742585632998,
				0.49105594192674662,
				-0.787641141030194,
				0.3379294217276218,
				0.072637522786462516,
				-0.021060292512300564,
				-0.044724901770665779,
				0.0017677118642428036,
				0.007800708325034148
			}
		},
		{
			filter::sym7,
			{
				0.0026818145682578781,
				0.0010473848886829163,
				-0.01263630340325193,
				-0.03051551316596357,
				0.067892693501372697,
				0.049552834937127255,
				0.017441255086855827,
				-0.5361019170917628,
				0.76776431700316405,
				-0.28862963175151463,
				-0.14004724044296152,
				0.10780823770381774,
				0.0040102448715336634,
				-0.010268176708511255
			}
		},
		{
			filter::sym8,
			{
				-0.0033824159510061256,
				0.00054213233179114812,
				0.031695087811492981,
				-0.0076074873249176054,
				-0.14329423835080971,
				0.061273359067658524,
				0.48135965125837221,
				-0.77718575170052351,
				0.3644418948353314,
				0.051945838107709037,
				-0.027219029917056003,
				-0.049137179673607506,
				0.0038087520138906151,
				0.014952258337048231,
				-0.0003029205147213668,
				-0.0018899503327594609
			}
		},
		{
			filter::sym9,
			{
				0.0014009155259146807,
				-0.00061978088898558676,
				-0.013271967781817119,
				0.01152821020767923,
				0.03022487885827568,
				-0.00058346274612580684,
				-0.054568958430834071,
				-0.238760914607303,
				0.717897082764412,
				-0.61733844914093583,
				0.035272488035271894,
				0.19155083129728512,
				-0.018233770779395985,
				-0.06207778930288603,
				0.0088592674934004842,
				0.010264064027633142,
				-0.00047315449868008311,
				-0.0010694900329086053
			}
		},
		{
			filter::sym10,
			{
				0.00077015980911449011,
				-9.5632670722894754e-05,
				-0.0086412992770224222,
				0.0014653825813050513,
				0.045927239231092203,
				-0.011609893903711381,
				-0.15949427888491757,
				0.070880535783243853,
				0.47169066693843925,
				-0.7695100370211071,
				0.38382676106708546,
				0.035536740473817552,
				-0.0319900568824278,
				-0.049994972077376687,
				0.0057649120335819086,
				0.02035493981231129,
				-0.00080435893201654491,
				-0.0045931735853118284,
				5.7036083618494284e-05,
				0.00045932942100465878
			}
		}
	};
	return map.at(filter_arg_enum(filter));
}

inline std::vector<double> lo_r(const filter_arg &filter)
{
	static const std::map<filter_t, const std::vector<double>> map{
		{filter::db1, {0.7071, 0.7071}},
		{filter::db2, {-0.12940952255092145, 0.22414386804185735, 0.83651630373746899, 0.48296291314469025}},
		{
			filter::db3,
			{
				0.035226291882100656,
				-0.085441273882241486,
				-0.13501102001039084,
				0.45987750211933132,
				0.80689150931333875,
				0.33267055295095688
			}
		},
		{
			filter::db4,
			{
				-0.010597401784997278,
				0.032883011666982945,
				0.030841381835986965,
				-0.18703481171888114,
				-0.027983769416983849,
				0.63088076792959036,
				0.71484657055254153,
				0.23037781330885523
			}
		},
		{
			filter::db5,
			{
				0.0033357252850015492,
				-0.012580751999015526,
				-0.0062414902130117052,
				0.077571493840065148,
				-0.03224486958502952,
				-0.24229488706619015,
				0.13842814590110342,
				0.72430852843857441,
				0.60382926979747287,
				0.16010239797412501
			}
		},
		{
			filter::db6,
			{
				-0.0010773010849955799,
				0.0047772575110106514,
				0.0005538422009938016,
				-0.031582039318031156,
				0.027522865530016288,
				0.097501605587079362,
				-0.12976686756709563,
				-0.22626469396516913,
				0.3152503517092432,
				0.75113390802157753,
				0.49462389039838539,
				0.11154074335008017
			}
		},
		{
			filter::db7,
			{
				0.00035371380000103988,
				-0.0018016407039998328,
				0.00042957797300470274,
				0.012550998556013784,
				-0.01657454163101562,
				-0.038029936935034633,
				0.080612609151065898,
				0.071309219267050042,
				-0.22403618499416572,
				-0.14390600392910627,
				0.4697822874053586,
				0.72913209084655506,
				0.39653931948230575,
				0.077852054085062364
			}
		},
		{
			filter::db8,
			{
				-0.00011747678400228192,
				0.00067544940599855677,
				-0.00039174037299597711,
				-0.0048703529930106603,
				0.0087460940470156547,
				0.013981027917015516,
				-0.044088253931064719,
				-0.017369301002022108,
				0.12874742662018601,
				0.00047248457399797254,
				-0.28401554296242809,
				-0.015829105256023893,
				0.58535468365486909,
				0.67563073629801285,
				0.31287159091446592,
				0.054415842243081609
			}
		},
		{
			filter::db9,
			{
				3.9347319995026124e-05,
				-0.00025196318899817888,
				0.00023038576399541288,
				0.0018476468829611268,
				-0.0042815036819047227,
				-0.004723204757894831,
				0.022361662123515244,
				0.00025094711499193845,
				-0.067632829059523988,
				0.030725681478322865,
				0.14854074933476008,
				-0.096840783220879037,
				-0.29327378327258685,
				0.13319738582208895,
				0.65728807803663891,
				0.6048231236767786,
				0.24383467463766728,
				0.038077947363167282
			}
		},
		{
			filter::db10,
			{
				-1.3264203002354869e-05,
				9.3588670001089845e-05,
				-0.0001164668549943862,
				-0.00068585669500468248,
				0.0019924052949908499,
				0.0013953517469940798,
				-0.010733175482979604,
				0.0036065535669883944,
				0.033212674058933238,
				-0.029457536821945671,
				-0.071394147165860775,
				0.093057364603806592,
				0.12736934033574265,
				-0.19594627437659665,
				-0.24984642432648865,
				0.28117234366042648,
				0.68845903945259213,
				0.52720118893091983,
				0.18817680007762133,
				0.026670057900950818
			}
		},
		{
			filter::db11,
			{
				4.4942742772363519e-06,
				-3.4634984186983789e-05,
				5.4439074699366381e-05,
				0.00024915252355281426,
				-0.00089302325066623663,
				-0.00030859285881515924,
				0.0049284176560587777,
				-0.0033408588730145018,
				-0.015364820906201324,
				0.020840904360180039,
				0.031335090219045313,
				-0.066438785695020222,
				-0.04647995511667613,
				0.14981201246638268,
				0.066043588196690886,
				-0.27423084681792875,
				-0.16227524502747828,
				0.41196436894789695,
				0.68568677491617847,
				0.44989976435603013,
				0.14406702115061959,
				0.018694297761470441
			}
		},
		{
			filter::db12,
			{
				-1.5290717580684923e-06,
				1.2776952219379579e-05,
				-2.4241545757030318e-05,
				-8.8504109208203182e-05,
				0.00038865306282092672,
				6.5451282125215034e-06,
				-0.0021795036186277044,
				0.0022486072409952287,
				0.0067114990087955486,
				-0.012840825198299882,
				-0.01221864906974642,
				0.041546277495087637,
				0.010849130255828966,
				-0.09643212009649671,
				0.0053595696743599965,
				0.18247860592758275,
				-0.023779257256064865,
				-0.31617845375277914,
				-0.044763885653777619,
				0.51588647842780067,
				0.65719872257929113,
				0.37735513521420411,
				0.10956627282118277,
				0.013112257957229239
			}
		},
		{
			filter::db13,
			{
				5.2200350984547998e-07,
				-4.7004164793608082e-06,
				1.0441930571407941e-05,
				3.0678537579324358e-05,
				-0.00016512898855650571,
				4.9251525126285676e-05,
				0.00093232613086724904,
				-0.0013156739118922766,
				-0.002761911234656831,
				0.0072555894016171187,
				0.0039239414487955773,
				-0.023831420710327809,
				0.0023799722540522269,
				0.056139477100276156,
				-0.026488406475345658,
				-0.10580761818792761,
				0.072948933656788742,
				0.17947607942935084,
				-0.12457673075080665,
				-0.31497290771138414,
				0.086985726179645007,
				0.58888957043121193,
				0.61105585115878114,
				0.31199632216043488,
				0.082861243872901946,
				0.0092021335389622788
			}
		},
		{
			filter::db14,
			{
				-1.7871399683109222e-07,
				1.7249946753674012e-06,
				-4.3897049017804176e-06,
				-1.0337209184568496e-05,
				6.875504252695734e-05,
				-4.1777245770370672e-05,
				-0.00038683194731287514,
				0.00070802115423540481,
				0.001061691085606874,
				-0.003849638868019787,
				-0.00074621898926387534,
				0.012789493266340071,
				-0.0056150495303375755,
				-0.030185351540353976,
				0.026981408307947971,
				0.05523712625925082,
				-0.071548955503983505,
				-0.086748411568110598,
				0.13998901658445695,
				0.13839521386479153,
				-0.21803352999321651,
				-0.27168855227867705,
				0.21867068775886594,
				0.63118784910471981,
				0.55430561794077093,
				0.25485026779256437,
				0.062364758849384874,
				0.0064611534600864905
			}
		},
		{
			filter::db15,
			{
				6.1333599133037138e-08,
				-6.3168823258794506e-07,
				1.8112704079399406e-06,
				3.3629871817363823e-06,
				-2.8133296266037558e-05,
				2.579269915531323e-05,
				0.00015589648992055726,
				-0.00035956524436229364,
				-0.00037348235413726472,
				0.0019433239803823459,
				-0.00024175649075894543,
				-0.0064877345603061454,
				0.0051010003604228726,
				0.015083918027862582,
				-0.020810050169636805,
				-0.025767007328366939,
				0.054780550584559995,
				0.033877143923563204,
				-0.11112093603713753,
				-0.039666176555733602,
				0.19014671400708816,
				0.065282952848765688,
				-0.28888259656686216,
				-0.19320413960907623,
				0.33900253545462167,
				0.64581314035721027,
				0.49263177170797529,
				0.20602386398692688,
				0.046743394892750617,
				0.0045385373615773762
			}
		},
		{filter::bior11, {0.70710678118654757, 0.70710678118654757}},
		{
			filter::bior13,
			{
				-0.088388347648318447,
				0.088388347648318447,
				0.70710678118654757,
				0.70710678118654757,
				0.088388347648318447,
				-0.088388347648318447,
			}
		},
		{
			filter::bior15,
			{
				0.01657281518405971,
				-0.01657281518405971,
				-0.12153397801643787,
				0.12153397801643787,
				0.70710678118654757,
				0.70710678118654757,
				0.12153397801643787,
				-0.12153397801643787,
				-0.01657281518405971,
				0.01657281518405971
			}
		},
		{
			filter::bior22,
			{
				0.0,
				-0.17677669529663689,
				0.35355339059327379,
				1.0606601717798214,
				0.35355339059327379,
				-0.17677669529663689
			}
		},
		{
			filter::bior24,
			{
				0.0,
				0.033145630368119419,
				-0.066291260736238838,
				-0.17677669529663689,
				0.4198446513295126,
				0.99436891104358249,
				0.4198446513295126,
				-0.17677669529663689,
				-0.066291260736238838,
				0.033145630368119419
			}
		},
		{
			filter::bior26,
			{
				0.0,
				-0.0069053396600248784,
				0.013810679320049757,
				0.046956309688169176,
				-0.10772329869638811,
				-0.16987135563661201,
				0.44746600996961211,
				0.96674755240348298,
				0.44746600996961211,
				-0.16987135563661201,
				-0.10772329869638811,
				0.046956309688169176,
				0.013810679320049757,
				-0.0069053396600248784
			}
		},
		{
			filter::bior28,
			{
				0.0,
				0.0015105430506304422,
				-0.0030210861012608843,
				-0.012947511862546647,
				0.028916109826354178,
				0.052998481890690945,
				-0.13491307360773608,
				-0.16382918343409025,
				0.46257144047591658,
				0.95164212189717856,
				0.46257144047591658,
				-0.16382918343409025,
				-0.13491307360773608,
				0.052998481890690945,
				0.028916109826354178,
				-0.012947511862546647,
				-0.0030210861012608843,
				0.0015105430506304422
			}
		},
		{filter::bior31, {-0.35355339059327379, 1.0606601717798214, 1.0606601717798214, -0.35355339059327379}},
		{
			filter::bior33,
			{
				0.066291260736238838,
				-0.19887378220871652,
				-0.15467960838455727,
				0.99436891104358249,
				0.99436891104358249,
				-0.15467960838455727,
				-0.19887378220871652,
				0.066291260736238838
			}
		},
		{
			filter::bior35,
			{
				-0.013810679320049757,
				0.041432037960149271,
				0.052480581416189075,
				-0.26792717880896527,
				-0.071815532464258744,
				0.96674755240348298,
				0.96674755240348298,
				-0.071815532464258744,
				-0.26792717880896527,
				0.052480581416189075,
				0.041432037960149271,
				-0.013810679320049757
			}
		},
		{
			filter::bior37,
			{
				0.0030210861012608843,
				-0.0090632583037826529,
				-0.016831765421310641,
				0.074663985074019001,
				0.031332978707362888,
				-0.301159125922835,
				-0.026499240945345472,
				0.95164212189717856,
				0.95164212189717856,
				-0.026499240945345472,
				-0.301159125922835,
				0.031332978707362888,
				0.074663985074019001,
				-0.016831765421310641,
				-0.0090632583037826529,
				0.0030210861012608843
			}
		},
		{
			filter::bior39,
			{
				-0.00067974437278369901,
				0.0020392331183510968,
				0.0050603192196119811,
				-0.020618912641105536,
				-0.014112787930175846,
				0.09913478249423216,
				0.012300136269419315,
				-0.32019196836077857,
				0.0020500227115698858,
				0.94212570067820678,
				0.94212570067820678,
				0.0020500227115698858,
				-0.32019196836077857,
				0.012300136269419315,
				0.09913478249423216,
				-0.014112787930175846,
				-0.020618912641105536,
				0.0050603192196119811,
				0.0020392331183510968,
				-0.00067974437278369901
			}
		},
		{
			filter::bior44,
			{
				0.0,
				0.03782845550726404,
				-0.023849465019556843,
				-0.11062440441843718,
				0.37740285561283066,
				0.85269867900889385,
				0.37740285561283066,
				-0.11062440441843718,
				-0.023849465019556843,
				0.03782845550726404
			}
		},
		{
			filter::bior55,
			{
				0.0,
				0.0,
				0.03968708834740544,
				0.0079481086372403219,
				-0.054463788468236907,
				0.34560528195603346,
				0.73666018142821055,
				0.34560528195603346,
				-0.054463788468236907,
				0.0079481086372403219,
				0.03968708834740544,
				0.0
			}
		},
		{
			filter::bior68,
			{
				0.0,
				0.0019088317364812906,
				-0.0019142861290887667,
				-0.016990639867602342,
				0.01193456527972926,
				0.04973290349094079,
				-0.077263173167204144,
				-0.09405920349573646,
				0.42079628460982682,
				0.82592299745840225,
				0.42079628460982682,
				-0.09405920349573646,
				-0.077263173167204144,
				0.04973290349094079,
				0.01193456527972926,
				-0.016990639867602342,
				-0.0019142861290887667,
				0.0019088317364812906
			}
		},
		{
			filter::coif1,
			{
				-0.01565572813546454,
				-0.072732619512853897,
				0.38486484686420286,
				0.85257202021225542,
				0.33789766245780922,
				-0.072732619512853897
			}
		},
		{
			filter::coif2,
			{
				-0.00072054944536451221,
				-0.0018232088707029932,
				0.0056114348193944995,
				0.023680171946334084,
				-0.059434418646456898,
				-0.076488599078306393,
				0.41700518442169254,
				0.81272363544554227,
				0.38611006682116222,
				-0.067372554721963018,
				-0.041464936781759151,
				0.016387336463522112
			}
		},
		{
			filter::coif3,
			{
				-3.4599772836212559e-05,
				-7.0983303138141252e-05,
				0.00046621696011288631,
				0.0011175187708906016,
				-0.0025745176887502236,
				-0.0090079761366615805,
				0.015880544863615904,
				0.034555027573061628,
				-0.082301927106885983,
				-0.071799821619312018,
				0.42848347637761874,
				0.79377722262562056,
				0.4051769024096169,
				-0.061123390002672869,
				-0.0657719112818555,
				0.023452696141836267,
				0.0077825964273254182,
				-0.0037935128644910141
			}
		},
		{
			filter::coif4,
			{
				-1.7849850030882614e-06,
				-3.2596802368833675e-06,
				3.1229875865345646e-05,
				6.2339034461007128e-05,
				-0.00025997455248771324,
				-0.00058902075624433831,
				0.0012665619292989445,
				0.0037514361572784571,
				-0.0056582866866107199,
				-0.015211731527946259,
				0.025082261844864097,
				0.039334427123337491,
				-0.096220442033987982,
				-0.066627474263425038,
				0.4343860564914685,
				0.78223893092049901,
				0.41530840703043026,
				-0.056077313316754807,
				-0.081266699680878754,
				0.026682300156053072,
				0.016068943964776348,
				-0.0073461663276420935,
				-0.0016294920126017326,
				0.00089231366858231456
			}
		},
		{
			filter::coif5,
			{
				-9.517657273819165e-08,
				-1.6744288576823017e-07,
				2.0637618513646814e-06,
				3.7346551751414047e-06,
				-2.1315026809955787e-05,
				-4.1340432272512511e-05,
				0.00014054114970203437,
				0.00030225958181306315,
				-0.00063813134304511142,
				-0.0016628637020130838,
				0.0024333732126576722,
				0.0067641854480530832,
				-0.0091642311624818458,
				-0.019761778942572639,
				0.032683574267111833,
				0.041289208750181702,
				-0.10557420870333893,
				-0.062035963962903569,
				0.43799162617183712,
				0.77428960365295618,
				0.42156620669085149,
				-0.052043163176243773,
				-0.091920010559696244,
				0.02816802897093635,
				0.023408156785839195,
				-0.010131117519849788,
				-0.004159358781386048,
				0.0021782363581090178,
				0.00035858968789573785,
				-0.00021208083980379827
			}
		},
		{filter::sym2, {-0.12940952255092145, 0.22414386804185735, 0.83651630373746899, 0.48296291314469025}},
		{
			filter::sym3,
			{
				0.035226291882100656,
				-0.085441273882241486,
				-0.13501102001039084,
				0.45987750211933132,
				0.80689150931333875,
				0.33267055295095688
			}
		},
		{
			filter::sym4,
			{
				-0.075765714789273325,
				-0.02963552764599851,
				0.49761866763201545,
				0.80373875180591614,
				0.29785779560527736,
				-0.099219543576847216,
				-0.012603967262037833,
				0.032223100604042702
			}
		},
		{
			filter::sym5,
			{
				0.027333068345077982,
				0.029519490925774643,
				-0.039134249302383094,
				0.1993975339773936,
				0.72340769040242059,
				0.63397896345821192,
				0.016602105764522319,
				-0.17532808990845047,
				-0.021101834024758855,
				0.019538882735286728
			}
		},
		{
			filter::sym6,
			{
				0.015404109327027373,
				0.0034907120842174702,
				-0.11799011114819057,
				-0.048311742585632998,
				0.49105594192674662,
				0.787641141030194,
				0.3379294217276218,
				-0.072637522786462516,
				-0.021060292512300564,
				0.044724901770665779,
				0.0017677118642428036,
				-0.007800708325034148
			}
		},
		{
			filter::sym7,
			{
				0.0026818145682578781,
				-0.0010473848886829163,
				-0.01263630340325193,
				0.03051551316596357,
				0.067892693501372697,
				-0.049552834937127255,
				0.017441255086855827,
				0.5361019170917628,
				0.76776431700316405,
				0.28862963175151463,
				-0.14004724044296152,
				-0.10780823770381774,
				0.0040102448715336634,
				0.010268176708511255
			}
		},
		{
			filter::sym8,
			{
				-0.0033824159510061256,
				-0.00054213233179114812,
				0.031695087811492981,
				0.0076074873249176054,
				-0.14329423835080971,
				-0.061273359067658524,
				0.48135965125837221,
				0.77718575170052351,
				0.3644418948353314,
				-0.051945838107709037,
				-0.027219029917056003,
				0.049137179673607506,
				0.0038087520138906151,
				-0.014952258337048231,
				-0.0003029205147213668,
				0.0018899503327594609
			}
		},
		{
			filter::sym9,
			{
				0.0014009155259146807,
				0.00061978088898558676,
				-0.013271967781817119,
				-0.01152821020767923,
				0.03022487885827568,
				0.00058346274612580684,
				-0.054568958430834071,
				0.238760914607303,
				0.717897082764412,
				0.61733844914093583,
				0.035272488035271894,
				-0.19155083129728512,
				-0.018233770779395985,
				0.06207778930288603,
				0.0088592674934004842,
				-0.010264064027633142,
				-0.00047315449868008311,
				0.0010694900329086053
			}
		},
		{
			filter::sym10,
			{
				0.00077015980911449011,
				9.5632670722894754e-05,
				-0.0086412992770224222,
				-0.0014653825813050513,
				0.045927239231092203,
				0.011609893903711381,
				-0.15949427888491757,
				-0.070880535783243853,
				0.47169066693843925,
				0.7695100370211071,
				0.38382676106708546,
				-0.035536740473817552,
				-0.0319900568824278,
				0.049994972077376687,
				0.0057649120335819086,
				-0.02035493981231129,
				-0.00080435893201654491,
				0.0045931735853118284,
				5.7036083618494284e-05,
				-0.00045932942100465878
			}
		}
	};
	return map.at(filter_arg_enum(filter));
}

inline std::vector<double> hi_r(const filter_arg &filter)
{
	static const std::map<filter_t, const std::vector<double>> map{
		{filter::db1, {-0.7071, 0.7071}},
		{filter::db2, {-0.48296291314469025, 0.83651630373746899, -0.22414386804185735, -0.12940952255092145}},
		{
			filter::db3,
			{
				-0.33267055295095688,
				0.80689150931333875,
				-0.45987750211933132,
				-0.13501102001039084,
				0.085441273882241486,
				0.035226291882100656
			}
		},
		{
			filter::db4,
			{
				-0.23037781330885523,
				0.71484657055254153,
				-0.63088076792959036,
				-0.027983769416983849,
				0.18703481171888114,
				0.030841381835986965,
				-0.032883011666982945,
				-0.010597401784997278
			}
		},
		{
			filter::db5,
			{
				-0.16010239797412501,
				0.60382926979747287,
				-0.72430852843857441,
				0.13842814590110342,
				0.24229488706619015,
				-0.03224486958502952,
				-0.077571493840065148,
				-0.0062414902130117052,
				0.012580751999015526,
				0.0033357252850015492
			}
		},
		{
			filter::db6,
			{
				-0.11154074335008017,
				0.49462389039838539,
				-0.75113390802157753,
				0.3152503517092432,
				0.22626469396516913,
				-0.12976686756709563,
				-0.097501605587079362,
				0.027522865530016288,
				0.031582039318031156,
				0.0005538422009938016,
				-0.0047772575110106514,
				-0.0010773010849955799
			}
		},
		{
			filter::db7,
			{
				-0.077852054085062364,
				0.39653931948230575,
				-0.72913209084655506,
				0.4697822874053586,
				0.14390600392910627,
				-0.22403618499416572,
				-0.071309219267050042,
				0.080612609151065898,
				0.038029936935034633,
				-0.01657454163101562,
				-0.012550998556013784,
				0.0004295779730047027,
				0.0018016407039998328,
				0.00035371380000103988
			}
		},
		{
			filter::db8,
			{
				-0.054415842243081609,
				0.31287159091446592,
				-0.67563073629801285,
				0.58535468365486909,
				0.015829105256023893,
				-0.28401554296242809,
				-0.00047248457399797254,
				0.12874742662018601,
				0.017369301002022108,
				-0.044088253931064719,
				-0.013981027917015516,
				0.0087460940470156547,
				0.0048703529930106603,
				-0.00039174037299597711,
				-0.00067544940599855677,
				-0.00011747678400228192
			}
		},
		{
			filter::db9,
			{
				-0.038077947363167282,
				0.24383467463766728,
				-0.6048231236767786,
				0.65728807803663891,
				-0.13319738582208895,
				-0.29327378327258685,
				0.096840783220879037,
				0.14854074933476008,
				-0.030725681478322865,
				-0.067632829059523988,
				-0.00025094711499193845,
				0.022361662123515244,
				0.004723204757894831,
				-0.0042815036819047227,
				-0.0018476468829611268,
				0.00023038576399541288,
				0.00025196318899817888,
				3.9347319995026124e-05
			}
		},
		{
			filter::db10,
			{
				-0.026670057900950818,
				0.18817680007762133,
				-0.52720118893091983,
				0.68845903945259213,
				-0.28117234366042648,
				-0.24984642432648865,
				0.19594627437659665,
				0.12736934033574265,
				-0.093057364603806592,
				-0.071394147165860775,
				0.029457536821945671,
				0.033212674058933238,
				-0.0036065535669883944,
				-0.010733175482979604,
				-0.0013953517469940798,
				0.0019924052949908499,
				0.00068585669500468248,
				-0.0001164668549943862,
				-9.3588670001089845e-05,
				-1.3264203002354869e-05
			}
		},
		{
			filter::db11,
			{
				-0.018694297761470441,
				0.14406702115061959,
				-0.44989976435603013,
				0.68568677491617847,
				-0.41196436894789695,
				-0.16227524502747828,
				0.27423084681792875,
				0.066043588196690886,
				-0.14981201246638268,
				-0.04647995511667613,
				0.066438785695020222,
				0.031335090219045313,
				-0.020840904360180039,
				-0.015364820906201324,
				0.0033408588730145018,
				0.0049284176560587777,
				0.00030859285881515924,
				-0.00089302325066623663,
				-0.00024915252355281426,
				5.4439074699366381e-05,
				3.4634984186983789e-05,
				4.4942742772363519e-06
			}
		},
		{
			filter::db12,
			{
				-0.013112257957229239,
				0.10956627282118277,
				-0.37735513521420411,
				0.65719872257929113,
				-0.51588647842780067,
				-0.044763885653777619,
				0.31617845375277914,
				-0.023779257256064865,
				-0.18247860592758275,
				0.0053595696743599965,
				0.09643212009649671,
				0.010849130255828966,
				-0.041546277495087637,
				-0.01221864906974642,
				0.012840825198299882,
				0.0067114990087955486,
				-0.0022486072409952287,
				-0.0021795036186277044,
				-6.5451282125215034e-06,
				0.00038865306282092672,
				8.8504109208203182e-05,
				-2.4241545757030318e-05,
				-1.2776952219379579e-05,
				-1.5290717580684923e-06
			}
		},
		{
			filter::db13,
			{
				-0.0092021335389622788,
				0.082861243872901946,
				-0.31199632216043488,
				0.61105585115878114,
				-0.58888957043121193,
				0.086985726179645007,
				0.31497290771138414,
				-0.12457673075080665,
				-0.17947607942935084,
				0.072948933656788742,
				0.10580761818792761,
				-0.026488406475345658,
				-0.056139477100276156,
				0.0023799722540522269,
				0.023831420710327809,
				0.0039239414487955773,
				-0.0072555894016171187,
				-0.002761911234656831,
				0.0013156739118922766,
				0.00093232613086724904,
				-4.9251525126285676e-05,
				-0.00016512898855650571,
				-3.0678537579324358e-05,
				1.0441930571407941e-05,
				4.7004164793608082e-06,
				5.2200350984547998e-07
			}
		},
		{
			filter::db14,
			{
				-0.0064611534600864905,
				0.062364758849384874,
				-0.25485026779256437,
				0.55430561794077093,
				-0.63118784910471981,
				0.21867068775886594,
				0.27168855227867705,
				-0.21803352999321651,
				-0.13839521386479153,
				0.13998901658445695,
				0.086748411568110598,
				-0.071548955503983505,
				-0.05523712625925082,
				0.026981408307947971,
				0.030185351540353976,
				-0.0056150495303375755,
				-0.012789493266340071,
				-0.00074621898926387534,
				0.003849638868019787,
				0.001061691085606874,
				-0.00070802115423540481,
				-0.00038683194731287514,
				4.1777245770370672e-05,
				6.875504252695734e-05,
				1.0337209184568496e-05,
				-4.3897049017804176e-06,
				-1.7249946753674012e-06,
				-1.7871399683109222e-07
			}
		},
		{
			filter::db15,
			{
				-0.0045385373615773762,
				0.046743394892750617,
				-0.20602386398692688,
				0.49263177170797529,
				-0.64581314035721027,
				0.33900253545462167,
				0.19320413960907623,
				-0.28888259656686216,
				-0.065282952848765688,
				0.19014671400708816,
				0.039666176555733602,
				-0.11112093603713753,
				-0.033877143923563204,
				0.054780550584559995,
				0.025767007328366939,
				-0.020810050169636805,
				-0.015083918027862582,
				0.0051010003604228726,
				0.0064877345603061454,
				-0.00024175649075894543,
				-0.0019433239803823459,
				-0.00037348235413726472,
				0.00035956524436229364,
				0.00015589648992055726,
				-2.579269915531323e-05,
				-2.8133296266037558e-05,
				-3.3629871817363823e-06,
				1.8112704079399406e-06,
				6.3168823258794506e-07,
				6.1333599133037138e-08
			}
		},
		{filter::bior11, {-0.70710678118654757, 0.70710678118654757}},
		{filter::bior13, {0.0, 0.0, -0.70710678118654757, 0.70710678118654757, 0.0, 0.0}},
		{filter::bior15, {0.0, 0.0, 0.0, 0.0, -0.70710678118654757, 0.70710678118654757, 0.0, 0.0, 0.0, 0.0}},
		{filter::bior22, {0.0, 0.35355339059327379, -0.70710678118654757, 0.35355339059327379, 0.0, 0.0}},
		{
			filter::bior24,
			{0.0, 0.0, 0.0, 0.35355339059327379, -0.70710678118654757, 0.35355339059327379, 0.0, 0.0, 0.0, 0.0}
		},
		{
			filter::bior26,
			{
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.35355339059327379,
				-0.70710678118654757,
				0.35355339059327379,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0
			}
		},
		{
			filter::bior28,
			{
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.35355339059327379,
				-0.70710678118654757,
				0.35355339059327379,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0
			}
		},
		{filter::bior31, {-0.17677669529663689, 0.53033008588991071, -0.53033008588991071, 0.17677669529663689}},
		{
			filter::bior33,
			{0.0, 0.0, -0.17677669529663689, 0.53033008588991071, -0.53033008588991071, 0.17677669529663689, 0.0, 0.0}
		},
		{
			filter::bior35,
			{
				0.0,
				0.0,
				0.0,
				0.0,
				-0.17677669529663689,
				0.53033008588991071,
				-0.53033008588991071,
				0.17677669529663689,
				0.0,
				0.0,
				0.0,
				0.0
			}
		},
		{
			filter::bior37,
			{
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				-0.17677669529663689,
				0.53033008588991071,
				-0.53033008588991071,
				0.17677669529663689,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0
			}
		},
		{
			filter::bior39,
			{
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				-0.17677669529663689,
				0.53033008588991071,
				-0.53033008588991071,
				0.17677669529663689,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0,
				0.0
			}
		},
		{
			filter::bior44,
			{
				0.0,
				-0.064538882628697058,
				0.040689417609164058,
				0.41809227322161724,
				-0.7884856164055829,
				0.41809227322161724,
				0.040689417609164058,
				-0.064538882628697058,
				0.0,
				0.0
			}
		},
		{
			filter::bior55,
			{
				-0.013456709459118716,
				-0.0026949668801115071,
				0.13670658466432914,
				-0.093504697400938863,
				-0.47680326579848425,
				0.89950610974864842,
				-0.47680326579848425,
				-0.093504697400938863,
				0.13670658466432914,
				-0.0026949668801115071,
				-0.013456709459118716,
				0.0
			}
		},
		{
			filter::bior68,
			{
				0.0,
				0.0,
				0.0,
				0.014426282505624435,
				-0.014467504896790148,
				-0.078722001062628819,
				0.040367979030339923,
				0.41784910915027457,
				-0.75890772945365415,
				0.41784910915027457,
				0.040367979030339923,
				-0.078722001062628819,
				-0.014467504896790148,
				0.014426282505624435,
				0.0,
				0.0,
				0.0,
				0.0
			}
		},
		{
			filter::coif1,
			{
				0.072732619512853897,
				0.33789766245780922,
				-0.85257202021225542,
				0.38486484686420286,
				0.072732619512853897,
				-0.01565572813546454
			}
		},
		{
			filter::coif2,
			{
				-0.016387336463522112,
				-0.041464936781759151,
				0.067372554721963018,
				0.38611006682116222,
				-0.81272363544554227,
				0.41700518442169254,
				0.076488599078306393,
				-0.059434418646456898,
				-0.023680171946334084,
				0.0056114348193944995,
				0.0018232088707029932,
				-0.00072054944536451221
			}
		},
		{
			filter::coif3,
			{
				0.0037935128644910141,
				0.0077825964273254182,
				-0.023452696141836267,
				-0.0657719112818555,
				0.061123390002672869,
				0.4051769024096169,
				-0.79377722262562056,
				0.42848347637761874,
				0.071799821619312018,
				-0.082301927106885983,
				-0.034555027573061628,
				0.015880544863615904,
				0.0090079761366615805,
				-0.0025745176887502236,
				-0.0011175187708906016,
				0.00046621696011288631,
				7.0983303138141252e-05,
				-3.4599772836212559e-05
			}
		},
		{
			filter::coif4,
			{
				-0.00089231366858231456,
				-0.0016294920126017326,
				0.0073461663276420935,
				0.016068943964776348,
				-0.026682300156053072,
				-0.081266699680878754,
				0.056077313316754807,
				0.41530840703043026,
				-0.78223893092049901,
				0.4343860564914685,
				0.066627474263425038,
				-0.096220442033987982,
				-0.039334427123337491,
				0.025082261844864097,
				0.015211731527946259,
				-0.0056582866866107199,
				-0.0037514361572784571,
				0.0012665619292989445,
				0.00058902075624433831,
				-0.00025997455248771324,
				-6.2339034461007128e-05,
				3.1229875865345646e-05,
				3.2596802368833675e-06,
				-1.7849850030882614e-06
			}
		},
		{
			filter::coif5,
			{
				0.00021208083980379827,
				0.00035858968789573785,
				-0.0021782363581090178,
				-0.004159358781386048,
				0.010131117519849788,
				0.023408156785839195,
				-0.02816802897093635,
				-0.091920010559696244,
				0.052043163176243773,
				0.42156620669085149,
				-0.77428960365295618,
				0.43799162617183712,
				0.062035963962903569,
				-0.10557420870333893,
				-0.041289208750181702,
				0.032683574267111833,
				0.019761778942572639,
				-0.0091642311624818458,
				-0.0067641854480530832,
				0.0024333732126576722,
				0.0016628637020130838,
				-0.00063813134304511142,
				-0.00030225958181306315,
				0.00014054114970203437,
				4.1340432272512511e-05,
				-2.1315026809955787e-05,
				-3.7346551751414047e-06,
				2.0637618513646814e-06,
				1.6744288576823017e-07,
				-9.517657273819165e-08
			}
		},
		{filter::sym2, {-0.48296291314469025, 0.83651630373746899, -0.22414386804185735, -0.12940952255092145}},
		{
			filter::sym3,
			{
				-0.33267055295095688,
				0.80689150931333875,
				-0.45987750211933132,
				-0.13501102001039084,
				0.085441273882241486,
				0.035226291882100656
			}
		},
		{
			filter::sym4,
			{
				-0.032223100604042702,
				-0.012603967262037833,
				0.099219543576847216,
				0.29785779560527736,
				-0.80373875180591614,
				0.49761866763201545,
				0.02963552764599851,
				-0.075765714789273325
			}
		},
		{
			filter::sym5,
			{
				-0.019538882735286728,
				-0.021101834024758855,
				0.17532808990845047,
				0.016602105764522319,
				-0.63397896345821192,
				0.72340769040242059,
				-0.1993975339773936,
				-0.039134249302383094,
				-0.029519490925774643,
				0.027333068345077982
			}
		},
		{
			filter::sym6,
			{
				0.007800708325034148,
				0.0017677118642428036,
				-0.044724901770665779,
				-0.021060292512300564,
				0.072637522786462516,
				0.3379294217276218,
				-0.787641141030194,
				0.49105594192674662,
				0.048311742585632998,
				-0.11799011114819057,
				-0.0034907120842174702,
				0.015404109327027373
			}
		},
		{
			filter::sym7,
			{
				-0.010268176708511255,
				0.0040102448715336634,
				0.10780823770381774,
				-0.14004724044296152,
				-0.28862963175151463,
				0.76776431700316405,
				-0.5361019170917628,
				0.017441255086855827,
				0.049552834937127255,
				0.067892693501372697,
				-0.03051551316596357,
				-0.01263630340325193,
				0.0010473848886829163,
				0.0026818145682578781
			}
		},
		{
			filter::sym8,
			{
				-0.0018899503327594609,
				-0.0003029205147213668,
				0.014952258337048231,
				0.0038087520138906151,
				-0.049137179673607506,
				-0.027219029917056003,
				0.051945838107709037,
				0.3644418948353314,
				-0.77718575170052351,
				0.48135965125837221,
				0.061273359067658524,
				-0.14329423835080971,
				-0.0076074873249176054,
				0.031695087811492981,
				0.00054213233179114812,
				-0.0033824159510061256
			}
		},
		{
			filter::sym9,
			{
				-0.0010694900329086053,
				-0.00047315449868008311,
				0.010264064027633142,
				0.0088592674934004842,
				-0.06207778930288603,
				-0.018233770779395985,
				0.19155083129728512,
				0.035272488035271894,
				-0.61733844914093583,
				0.717897082764412,
				-0.238760914607303,
				-0.054568958430834071,
				-0.00058346274612580684,
				0.03022487885827568,
				0.01152821020767923,
				-0.013271967781817119,
				-0.00061978088898558676,
				0.0014009155259146807
			}
		},
		{
			filter::sym10,
			{
				0.00045932942100465878,
				5.7036083618494284e-05,
				-0.0045931735853118284,
				-0.00080435893201654491,
				0.02035493981231129,
				0.0057649120335819086,
				-0.049994972077376687,
				-0.0319900568824278,
				0.035536740473817552,
				0.38382676106708546,
				-0.7695100370211071,
				0.47169066693843925,
				0.070880535783243853,
				-0.15949427888491757,
				-0.011609893903711381,
				0.045927239231092203,
				0.0014653825813050513,
				-0.0086412992770224222,
				-9.5632670722894754e-05,
				0.00077015980911449011
			}
		}
	};
	return map.at(filter_arg_enum(filter));
}

} //namespace waveletpp


#endif //WAVELETPP_DETAIL_FILTER_H